<?php
/**
 * Sqlite
 *
 * @package php.db
 */

/**
 * sqlite 연결 클래스 
 *
 * @package php.db
 */
class Sqlite extends DBClient {

	/**
	 * 생성자
	 *
	 */
	public function __construct($option = '', $type = 'product') {
		parent::__construct($option, $type);
	}

	/**
	 * database 연결 생성
	 * 
	 * @return resource 연결 resource
	 */
	protected function _connect() { 
		return sqlite_open($this->host.$this->db);
	}

	/**
	 * 실행된 row 수 
	 *
	 * @return int 
	 */
	public function affectedRows() { 
		return sqlite_changes($this->getConnection());
	}

	/**
	 * 연결 닫기 
	 */
	public function close()
	{
		if ($this->getConnection()) { 
			sqlite_close($this->getConnection());
		}
	}

	/**
	 * 에러 메세지 리턴
	 * 
	 * @return string 에러 메세지 
	 */	
	public function error() {
		return sqlite_error_string(sqlite_last_error($this->getConnection())) ;
	}

	/**
	 * 문자열 escape	
	 * 
	 * @param string $str  escape 될 문자열 
	 * @return string escape 된 문자열
	 */
	public function escape($str) { 
		return sqlite_escape_string ($str);
	}


	/**
	 * 실행된 select 쿼리에 대해서 fetch 를 통해 한 행(row)을 리턴한다. 
	 *
	 * 리턴되는 값은 array('필드' => 'ㅁㅁㅁ', ...); 형태를 가진다. 
	 * 
	 * @param resource $result select 결과로 나온 resource
	 * @return array row 데이타 
	 */
	public function fetch($result, $result_type = SQLITE_ASSOC) {
		return sqlite_fetch_array($result, $result_type);
	}

	public function fetchAll($result, $result_type = SQLITE_ASSOC, $decode_binary = true) { 
		return sqlite_fetch_all($result, $result_type, $decode_binary);
	}

	/** 
	 * 메모리 해제 
	 * 
	 * @return bool
	 */
	public function free($result) {
		return true;
	}

	/**
	 * 쿼리의 결과로 나온 필드의 개수를 리턴한다.
	 *
	 * @param resource $result select 결과로 나온 resource
	 * @return int 필드개수 
	 */
	public function getFieldCount($result) {
		return sqlite_num_fields($result);
	}

	/**
	 * 정해진 위치의 필드 이름을 얻어온다. 
	 *
	 * @param resource $result select 결과로 나온 resource
	 * @param int $i 필드 위치, 처음은 0 
	 * @return string 필드이름 
	 */
	public function getFieldName($result, $i) {
		return sqlite_field_name($result, $i);
	}

	/**
	 * 정해진 위치의 필드 타입을 얻어온다. 
	 *
	 * @param resource $result select 결과로 나온 resource
	 * @param int $i 필드 위치, 처음은 0 
	 * @return string 필드타입
	 */
	public function getFieldType($result, $i) {
		return "varchar";
	}


	/**
	 * select 쿼리에 대해서 페이징된 DBData를 리턴한다. 
	 *
	 * @param string $query select 쿼리
	 * @param int $page 현재 페이지  
	 * @param int $count 페이지당 리스트 개수 
	 * @return DBData
	 */
	function getPageData($query, $page, $count = 10)
	{
		// 시작지점 계산하기 
		$start = ($page-1)*$count;

		$query .= " limit $start, $count";

		return $this->getData($query, false);
	}

	/** 
	 * 일반 쿼리 실행 
	 * 
	 * @param string $sql 실행될 query 
	 * @return resource 실행 resource
	 */
	public function query($sql) {
		$this->setResult(sqlite_query($this->getConnection(), $sql));
		return $this->getResult();
	}

	/**
	 * 커서 이동 
	 * 
	 * @param int $count 이동시킬 상대위치, 사직행은 0 
	 * @return bool
	 */
	public function seek($count) { 
		return sqlite_seek ( $this->getResult(), $count );
	}

}

?>